package com.hzncc.flowable_diboot.contract.service;

import com.diboot.core.service.BaseService;
import com.diboot.core.vo.JsonResult;
import com.diboot.core.vo.Pagination;
import com.hzncc.flowable_diboot.contract.dto.ContractAuditDTO;
import com.hzncc.flowable_diboot.contract.entity.ContractAudit;
import com.hzncc.flowable_diboot.contract.entity.ContractAuditCancel;
import com.hzncc.flowable_diboot.contract.entity.ContractAuditUpdate;
import com.hzncc.flowable_diboot.contract.entity.ContractProductMaterial;
import com.hzncc.flowable_diboot.contract.vo.*;
import com.sap.conn.jco.JCoException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
* 合同审批 相关Service接口定义
* @author MyName
* @version 1.0
* @date 2024-07-12
* Copyright © MyCorp
*/
public interface ContractAuditService extends BaseService<ContractAudit> {

    List<ContractAuditTaskVO> getContractTodo();

    /**
     * 合同归档
     * @param contractAuditIds
     */
    void archiveContract(List<String> contractAuditIds);

    /**
     * 复制合同
     * @param contractAuditId
     * @return
     */
    ContractAuditVO copyContractDetail(String contractAuditId);

    /**
     * 获取合同审批详情
     * @param contractAuditId
     * @return
     */
    ContractAuditVO getContractDetail(String contractAuditId);

    /**
     * 根据合同编码获取获取最新的合同审批详情
     * @param contractCode
     * @return
     */
    ContractAuditVO getContractDetailByCode(String contractCode);

    /**
     * 根据合同编码获取获取最新的合同审批ID
     *
     * @param contractCode
     * @return
     */
    String getContractAuditIdByCode(String contractCode);

    /**
     * 分页查询合同审批
     * @param contractAuditPageReqVO
     * @param pagination
     * @return
     */
    List<ContractAuditVO> getContractPage(ContractAuditPageReqVO contractAuditPageReqVO, Pagination pagination);

    /**
     * 新增合同审批
     * @param contractAuditVO
     */
    String saveContractAudit(ContractAuditVO contractAuditVO);

    /**
     * 删除合同平生
     * @param contractAuditId
     */
    void deleteContractAudit(String contractAuditId);

    /**
     * 提交合同审批
     * @param contractAuditVO
     * @return
     */
    String submitContractAudit(ContractAuditVO contractAuditVO);

    /**
     * 保存合同变更审批
     * @param contractAuditVO
     */
    String saveContractAuditUpdate(ContractAuditVO contractAuditVO);

    /**
     * 删除合同变更平生
     * @param contractAuditId
     */
    void deleteContractAuditUpdate(String contractAuditId);

    /**
     * 提交合同变更审批
     *
     * @param contractAuditVO
     * @return
     */
    String submitContractAuditUpdate(ContractAuditVO contractAuditVO);

    /**
     * 查询合同历史版本
     * @param contractAuditVO
     * @return
     */
    List<ContractAuditVO> getContractAuditHistory(ContractAuditVO contractAuditVO);

    /**
     * 合同取消评审
     * @param contractAuditCancelVO
     */
    String saveContractAuditCancel(ContractAuditCancelVO contractAuditCancelVO);

    /**
     * 删除合同取消评审
     * @param contractAuditId
     */
    void deleteContractAuditCancel(String contractAuditId);

    /**
     * 提交合同取消评审
     * @param contractAuditCancelVO
     * @return
     */
    String submitContractAuditCancel(ContractAuditCancelVO contractAuditCancelVO);

    /**
     * 
     * @param contractAuditVO
     * @return
     */
    String saveContract(ContractAuditVO contractAuditVO);

    /**
     * 任务提交
     * @param contractAuditVO
     */
    void approveContract(ContractAuditTaskVO contractAuditTaskVO);

    /**
     * sap物料进行对比
     *
     * @param sapCustomer
     * @param org
     * @param mrlList
     * @return
     * @author 陈广煜
     * @date 2024-08-19
     */
    List<ContractProductMaterialVO> compareMaterial(String sapCustomer, String org, List<ContractProductMaterialVO> mrlList);



    List<DiffVO> getDiff(String id);
    List<ChangeMrlVO> getCncDiff(String id);

    List<DiffVO> getDiff(String id, List<ContractProductListVO> contractProductVOList);


    List<ProductDiffVO> getProductDiff(String id);

    List<ProductDiffVO> getCncProductDiff(String id);

    List<ProductDiffVO> getProductDiff(String id, List<ContractProductListVO> contractProductVOList);

    /**
     * 合同查询
     *
     * @param dto 一般查询条件
     * @param type draft 草稿  formal 评审
     * @param permission star 关注 sub 下属  all 全部 self 自己
     * @param pagination 分页
     * @return
     * @author 陈广煜
     * @date 2024-09-19
     */
    JsonResult<List<ContractAuditVO>> selectContract(ContractAuditDTO dto, String type, String permission, Pagination pagination);

    /**
     * 归档合同取消
     * @param contractAuditIds
     */
    void cancelArchive(List<String> contractAuditIds);

    JsonResult<String> receiveOaApprovalAuditResults(String objectid, String result, String bdcode) throws JCoException;

    Map<String,String> getSapMrlDetail(String mrlCode, String salesOrg,String sapNo);

    List<Map<String,String>> getSapMrlList(String mrlCode, String salesOrg,String sapNo,Pagination pagination);

    String printWord(String id) throws IOException, InvalidFormatException;

    void addTechList(ContractProductListVO contractProductListVO);

    Map<String, String> getSapInventory(List<ContractProductMaterial> mrlList) throws JCoException;

    /**
     * 查询合同变更
     * @return
     */
    JsonResult<List<ContractAuditUpdateListVO>> selectContractUpdateDetailList(List<ContractAuditUpdate> updates);

    /**
     * 查询合同取消评审
     * @return
     */
    JsonResult<List<ContractAuditCancelListVO>> selectContractCancelDetailList(List<ContractAuditCancel> cancels);

    void updateSapStatus(List<String> ids);
}